package com.qf.service;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Service;

@Service
public class UserDetailServiceImpl implements UserDetailsService {
    /**
     * 根据username参数，去查询数据库，获取到数据库的用户信息，分装成一个UserDetails返回
     * @param username
     * @return
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        //模拟的第一个用户： zs-123-P1
        if ("zs".equals(username)){
            return User.withUsername(username)
                    .password(BCrypt.hashpw("123",BCrypt.gensalt()))
                    //设置时，设置的是什么，最终就是什么格式（这两个方法选择其一即可）
                    .authorities("P1")
                    //这个方法设置角色权限时，内部会自动在我们设置的字符串基础上拼接 ROLE_前缀
                    //比如我们设置的是P1 ,内部会转换成 ROLE_P1
                    //所以这个方法设置的角色字符串不可以以 ROLE_开头
//                    .roles("P1")
                    .build();

        //模拟的第二个用户： ls-456-P2
        }else if ("ls".equals(username)){
            return User.withUsername(username)
                    .password(BCrypt.hashpw("456",BCrypt.gensalt()))
                    //设置时，设置的是什么，最终就是什么格式（这两个方法选择其一即可）
                    .authorities("P2")
                    //这个方法设置角色权限时，内部会自动在我们设置的字符串基础上拼接 ROLE_前缀
                    //比如我们设置的是P1 ,内部会转换成 ROLE_P1
                    //所以这个方法设置的角色字符串不可以以 ROLE_开头
//                    .roles("P2")
                    .build();
        }

        return null;
    }

    public static void main(String[] args) {
        String hashpw = BCrypt.hashpw("123", BCrypt.gensalt());
        System.out.println(hashpw);
    }
}
